public class code01 {
//    力扣 150 完成每个节点下的右侧节点指针 II
public Node connect(Node root) {
    // 这道题目的要求是要将二叉树中的所有结点的 next 都指向右侧
    // 需要注意的是，这里定义的 Node 节点是有三个参数的！
    // 要实现左侧节点指向右侧节点，这里可以通过层序遍历对每一层的参数进行修改
    // 可以使用一个队列来存储每一层的参数，处理结束后清空即可
    if(root == null) {
        return null;
    }

    Queue<Node> queue = new ArrayDeque<Node>();

    // 首先现将根节点存储到队列中
    queue.offer(root);

    // 进行 while 循环对每一层的数据都进行处理
    // 需要注意的一点是，这里的 next 不设置时，默认就是 null
    while(!queue.isEmpty()) {
        // 获取到队列的元素长度，方便后续通过 for 循环建立连接关系
        int size = queue.size();

        // 随着 while 循环的进行，这个最后会记录一遍队列中的每一个参数
        Node flag = null;

        for(int i = 1; i <= size; i++) {
            // 尝试获取到队列中的第一个元素
            Node n = queue.poll();

            // 针对这一个元素进行题目要求的条件判断
            if(n.left != null) {
                // 将该节点的左子树添加到队列中
                queue.offer(n.left);
            }
            if(n.right != null) {
                // 将该节点的右子树添加到队列中
                queue.offer(n.right);
            }

            // 判断是否要将 该节点的 next 指向何处
            if(i != 1) {
                // 当 i = 1 时，此时 n 获取到的节点都是该二叉树中最左侧的节点
                // 将之前 flag 记录下的左节点的 next 设置为 其 相对的右节点
                flag.next = n;
            }
            // 此时 i == 1 就需要将 flag 的值记录下左侧节点
            flag = n;
        }
    }
    return root;
}
}
